/**
 * 
 */
package com.proyecto.aiepi.modelo.servicios;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.aiepi.modelo.dto.AiepisDiagnosticos;
import com.proyecto.aiepi.modelo.dto.CorrelativosAiepisId;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;

/**
 * @author vico
 *
 */
public class ServicioTablaApoyoAiepisDiagnosticos extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosAiepis servicioCorrelativosAiepis;
	
	public ServicioTablaApoyoAiepisDiagnosticos() {
		// TODO Auto-generated constructor stub
	}


	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		//super.incluir(pojo, iniciaTransaccion);
		
		AiepisDiagnosticos objAiepisDiagnosticos = (AiepisDiagnosticos)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objAiepisDiagnosticos);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosAiepis.obtenerProximoNumeroComoString(
					new CorrelativosAiepisId (objAiepisDiagnosticos.getId().getCiaopr(), "AIEPIDX","aiepidxcod" ) ,true);

			objAiepisDiagnosticos.getId().setAiepidxcod( Integer.parseInt(proxNumero) );
		
			super.incluir(objAiepisDiagnosticos, iniciaTransaccion);
			
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioTablaApoyoAiepisDiagnosticos::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoriasClinicas.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	/**
	 * 
	 * @param ciaopr
	 * @param campoaiepirespucod
	 * @return aiepidxcod, campoaiepirespucod, ciecod
	 */
	public List<List> buscarAiepisDiagnosticos(String ciaopr, String cadenaCampoaiepirespucod){
		List<List> lstAiepisDiagnosticos = null;
		String sql = "";
		sql = "SELECT new List( " +
						"A.id.aiepidxcod, A.campoaiepirespucod, A.ciecod )" +
					"FROM AiepisDiagnosticos AS A " +
					"WHERE A.id.ciaopr = '" + ciaopr + "'" +
							"AND campoaiepirespucod IN (" + cadenaCampoaiepirespucod + ")" +
					"ORDER BY A.campoaiepirespucod ";		
		try {
			//System.out.println("cantidadRiesgocod.query:: " + sql);
			lstAiepisDiagnosticos = propiedadDAO.ejecutarQueryConsulta(sql, null);
			return lstAiepisDiagnosticos;	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("error en consulta buscarAiepisDiagnosticos " + e.getMessage());
			return null;
		}
	}
	
	public List<List> buscarAiepisDiagnosticos(String ciaopr, Integer campoaiepirespucod){
		List<List> lstAiepisDiagnosticos = null;
		String sql = "";
		sql = "SELECT new List( " +
						"A.id.aiepidxcod, A.campoaiepirespucod, A.ciecod )" +
					"FROM AiepisDiagnosticos AS A " +
					"WHERE A.id.ciaopr = '" + ciaopr + "'" +
							"AND campoaiepirespucod = " + campoaiepirespucod +
					"ORDER BY A.campoaiepirespucod ";		
		try {
			//System.out.println("cantidadRiesgocod.query:: " + sql);
			lstAiepisDiagnosticos = propiedadDAO.ejecutarQueryConsulta(sql, null);
			return lstAiepisDiagnosticos;	
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("error en consulta buscarAiepisDiagnosticos " + e.getMessage());
			return null;
		}
	}
	
	public ServicioCorrelativosAiepis getServicioCorrelativosAiepis() {
		return servicioCorrelativosAiepis;
	}


	public void setServicioCorrelativosAiepis(
			ServicioCorrelativosAiepis servicioCorrelativosAiepis) {
		this.servicioCorrelativosAiepis = servicioCorrelativosAiepis;
	}

}
